package Balas;

import java.awt.Point;

import javax.swing.JLabel;

import Juego.Juego;
import Naves.Enemigas.Nave_Enemiga;
import Naves.Tanques.Tanque;
import PowerUps.PowerUp;

/**Clase que implementa el comportamiento de una bala dentro del juego
 * 
 * @author Javier Graff
 * @author Eric Avondet
 * @author Rodrigo Herrera
 *
 */
@SuppressWarnings("serial")
public abstract class Bala extends JLabel
{
	
	protected int tipo_movimiento;
	protected int Velocidad;
	protected int Potencia;
	protected Juego juego; 
	
	
	/**
	 * Cambia la bala de posicion
	 */
	public abstract void mover();
	
	
	/**
	 * Mueve la bala hacia adelante
	 */
	public void adelante()
	{
		Point pos = this.getLocation();
		pos.setLocation(pos.getX(), pos.getY()-Velocidad);
		this.setLocation(pos);
	}
	
	/**
	 * Mueve la bala hacia atras
	 */
	public void atras()
	{
		Point pos = this.getLocation();
		pos.setLocation(pos.getX(), pos.getY()+Velocidad);
		this.setLocation(pos);
	}
	
	/**
	 * Mueve la bala hacia la derecha
	 */
	public void derecha()
	{
		Point pos = this.getLocation();
		pos.setLocation(pos.getX()+Velocidad, pos.getY());
		this.setLocation(pos);
	}
	
	/**
	 * Mueve la bala hacia la izquierda
	 */
	public void izquierda()
	{
		Point pos = this.getLocation();
		pos.setLocation(pos.getX()-Velocidad, pos.getY());
		this.setLocation(pos);
	}
	
	/**Eventos que ocurren cuando la bala impacta a una nave
	 * 
	 * @param nave nave impactada por la bala
	 */
	
	public abstract void impactar(Nave_Enemiga nave);
	
	/**Eventos que ocurren cuando la bala impacta a un tanque
	 * 
	 * @param t tanque impactado por la bala
	 */
	public abstract void impactar(Tanque t);
	
	/**Eventos que ocurren cuando una bala impacta un powerup
	 * 
	 * @param p powerup impactado
	 */
	public abstract void impactar(PowerUp p);
	
	/**
	 * Setea el movimiento hacia adelante
	 */
	public abstract void set_mov_ad();
	
	/**
	 * Setea el movimiento hacia atras
	 */
	public abstract void set_mov_at();
	
	
	/**
	 * Setea el movimiento hacia la derecha
	 */
	public abstract void set_mov_de();
	
	/**
	 * Setea el movimiento hacia la izquierda
	 */
	public abstract void set_mov_iz();

	/**
	 * Setea el movimiento hacia el noreste
	 */
	public abstract void set_mov_ne();

	/**
	 * Setea el movimiento hacia el noroeste
	 */
	public abstract void set_mov_no();
	
	/**
	 * Setea el movimiento hacia el sureste
	 */
	public abstract void set_mov_se();
	
	/**
	 * Setea el movimiento hacia el suroeste
	 */
	public abstract void set_mov_so();
	
	
}
